package com.zlsy.thread.singleton;

import java.util.Objects;

/**
 * @author zhouliang
 * @date 2020/5/8 20:39
 * <p>
 * 懒汉式 - 线程不安全的【对4的第一代升级版本】
 */
public class Singleton5 {

    private static Singleton5 instance;

    private Singleton5() {
    }

    /**
     * 我们不想高并发的时候全部的线程只能单个单个的进入这个方法，导致效率低下
     * 所以我们把synchronized放到方法内部
     *
     * 那么，我们放在哪里合适呐？
     *
     * 因为我们创建对象的时候需要是线程安全的，所以我们把创建对象包起来。（这种还是有问题的）
     *
     * @return Singleton5
     */
    public static Singleton5 getInstance() {
        if (Objects.isNull(instance)) {
            synchronized (Singleton5.class) {
                instance = new Singleton5();
            }
        }
        return instance;
    }
}
